package com.itheima.mapper;

import com.itheima.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    /**
     * 查询所有的品牌信息
     *     定义方法秘诀
     *          三要素
     *            方法名 返回值类型  参数
     */
    List<Brand> selectAll();

    /**
     * 根据id查询 一个品牌详情
     *    定义方法 三要素
     *       方法名  返回值类型  参数
     */
    Brand selectById( int id);

    /**
     *  根据三个条件 查询相关的信息  品牌信息(多个)
     *    方法名      selectByCondition
     *    方法的返回值   List<Brand>
     *    方法的参数  int status String companyName String brandName
     *
     *   如果接口中的方法参数
     *      是多个参数情况
     *        要么采用 排序方式获取
     *             arg0  arg1 arg2 ....
     *             param1 param2.....
     *        建议 我们在参数的前面定义一个注解
     *      @Param("name")  接收的参数 叫name
     *      在 sql语句中 就可以通过 #{name}接收
     *
     *     是一个参数
     *       可以写 @Param() 可以省略
     */
//    List<Brand> selectByCondition(@Param("status") int status,@Param("comanyName") String companyName, @Param("brandName") String brandName);

    /**
     根据三个条件 查询相关的信息  品牌信息(多个)
     *    方法名      selectByCondition
     *    方法的返回值   List<Brand>
     *    方法的参数  可以封装到一个对象中  Brand
     *     int status String companyName String brandName
     */
//    List<Brand> selectByCondition(Brand brand);


    /**
     根据三个条件 查询相关的信息  品牌信息(多个)
     *    方法名      selectByCondition
     *    方法的返回值   List<Brand>
     *    方法的参数  可以封装到一个Map集合中
     *     int status String companyName String brandName
     */
    List<Brand> selectByCondition(Map map);

    /**
     * 多个条件 选单个
     *    单个 Single
     *    方法
     *      方法名  selectByConditionSingle
     *      返回值  List<Brand>
     *      参数   Brand 把三个条件封装到对象中
     */
    List<Brand> selectByConditionSingle(Brand brand);

    /**
     *   添加 一个 品牌信息
     *     方法名  add
     *     参数    Brand (封装添加的数据)
     *     返回值  void
     */
    void add(Brand brand);

    /**
     *   修改信息
     *   方法名  update
     *   参数   id 修改的全部字段 (Brand)
     *   返回值 void
     */
    void update(Brand brand);

    /**
     * 根据id  删除信息
     *   方法名  deleteById
     *   参数   id
     *   返回值 void
     */
    void deleteById(@Param("id") int id);

    /**
     * 根据id 们 多个id 删除信息
     *   方法名  deleteByIds
     *   参数     int[] ids
     *   返回值 void
     */
    void deleteByIds(int[] ids);


}
